//#include <iostream>
//#include <vector>
//#include <utility>
//
//using namespace std;
//vector< bool > used;
//
//void dfs( int v, vector< int >* comp, vector< vector< int > >* g ) {
//	( used )[v] = true;
//	( *comp ).push_back( v );
//	for( size_t i = 0; i < ( *g )[v].size(); ++i ) {
//		int to = ( *g )[v][i];
//		if( !( used )[to] )
//			dfs( to, comp, g );
//	}
//};
// 
//int find_comps( int n, vector< int >* comp, vector< vector< int > >* g ) {
//	int comp_count = 0;
//	used.resize( n, false );
//	for( int i = 0; i < n; ++i )
//		if( !( used )[i] ) {
//			( *comp ).clear();
//			dfs( i, comp, g );
//			comp_count++;
//		}
//	return comp_count;
//}
//
//int main() {
//	int n;
//
//	freopen( "1.txt", "r", stdin );
//    cin >> n;
//	vector< vector< int > > g;
//	vector< int > comp;
//	for( int i = 0; i < n; ++i ) {
//		vector< int > a;
//		for( int j = 0; j < n; ++j ) {
//			if( j != i ) {
//				a.push_back( j );
//			}
//		}
//		g.push_back( a );
//	}
//    while( true ) {
//        int x, y;
//        cin >> x >> y;
//        if( y != x ) {
//			for( vector< int >::iterator i = g[x].begin(); i != g[x].end(); ++i ) {
//				if( ( *i ) == y ) {
//					g[x].erase( i );
//					break;
//				}
//			}
//			for( vector< int >::iterator i = g[y].begin(); i != g[y].end(); ++i ) {
//				if( ( *i ) == x ) {
//					g[y].erase( i );
//					break;
//				}
//			}
//		}
//        if( x == 0 && y == 0 )
//            break;
//    }
//	int c = find_comps( n, &comp, &g );
//	freopen( "2.txt", "w", stdout );
//	if( c == 2 ) {
//		cout << "YES";
//	}
//	else
//		cout << "NO";
//	return 0;
//};